package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.dto.ChildrenDto;
import com.itheima.dto.ListDto;
import com.itheima.dto.SysConfigDto;
import com.itheima.dto.SysConfigDtoEs;
import com.itheima.entity.SysConfig;
import com.itheima.mapper.SysConfigMapper;
import com.itheima.service.SysConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService {
    @Override
    public SysConfigDto getAll() {
        LambdaQueryWrapper<SysConfig> qw = new LambdaQueryWrapper<>();
        //第一个listdto
        ListDto dto = new ListDto();  //总的ResDto
        ArrayList<ListDto> listRes = new ArrayList<>();
        dto.setName("基础配置");
        dto.setKey("base");
        ArrayList<ChildrenDto> children = new ArrayList<>();
        qw.eq(SysConfig::getTabValue, "base");
        qw.eq(SysConfig::getGroupValue, "站点配置");
        List<SysConfig> list = super.list(qw);
        List<SysConfigDtoEs> collecttemp = list.stream().map((item) -> {
            SysConfigDtoEs info = new SysConfigDtoEs();
            BeanUtils.copyProperties(item, info);
            if (item.getId() == 125) {
                info = doConfigValue(info, item);
            }
            return info;
        }).collect(Collectors.toList());


        ChildrenDto childrenDto = new ChildrenDto();
        childrenDto.setName("站点配置");
        childrenDto.setData(collecttemp);
        children.add(childrenDto);


        LambdaQueryWrapper<SysConfig> qw1 = new LambdaQueryWrapper<>();
        qw1.eq(SysConfig::getGroupValue, "底部信息");
        List<SysConfig> list1 = super.list(qw1);

        ChildrenDto childrenDto1 = new ChildrenDto();
        childrenDto1.setName("底部信息");
        childrenDto1.setData(list1);
        children.add(childrenDto1);


        LambdaQueryWrapper<SysConfig> qw2 = new LambdaQueryWrapper<>();
        qw2.eq(SysConfig::getGroupValue, "其他配置");
        List<SysConfig> list2 = super.list(qw2);

        ChildrenDto childrenDto2 = new ChildrenDto();
        childrenDto2.setName("其他配置");
        childrenDto2.setData(list2);
        children.add(childrenDto2);

        dto.setChildren(children);
        listRes.add(dto);
//第二个listdto
        ListDto dto1 = new ListDto();
        dto1.setName("其他设置");
        dto1.setKey("custom");
        ArrayList<ChildrenDto> children1 = new ArrayList<>();

        LambdaQueryWrapper<SysConfig> qw3 = new LambdaQueryWrapper<>();
        qw3.eq(SysConfig::getGroupValue, "前台图片");
        List<SysConfig> list3 = super.list(qw3);

        ChildrenDto childrenDto3 = new ChildrenDto();
        childrenDto3.setName("前台图片");
        childrenDto3.setData(list3);
        children1.add(childrenDto3);


        LambdaQueryWrapper<SysConfig> qw5 = new LambdaQueryWrapper<>();
        qw5.eq(SysConfig::getGroupValue, "通知公告");
        List<SysConfig> list5 = super.list(qw5);

        ChildrenDto childrenDto5 = new ChildrenDto();
        childrenDto5.setName("通知公告");
        childrenDto5.setData(list5);
        children1.add(childrenDto5);
        dto1.setChildren(children1);
        listRes.add(dto1);

//第三个listdto
        ListDto dto2 = new ListDto();
        dto2.setName("系统设置");
        dto2.setKey("system");
        ArrayList<ChildrenDto> children2 = new ArrayList<>();
        LambdaQueryWrapper<SysConfig> qw4 = new LambdaQueryWrapper<>();
        qw4.eq(SysConfig::getGroupValue, "管理系统配置");
        List<SysConfig> list4 = super.list(qw4);

        ChildrenDto childrenDto4 = new ChildrenDto();
        childrenDto4.setName("管理系统配置");
        childrenDto4.setData(list4);
        children2.add(childrenDto4);
        dto2.setChildren(children2);
        listRes.add(dto2);
        SysConfigDto dtoRes = new SysConfigDto();
        dtoRes.setList(listRes);

        //alldate
        List<SysConfig> allData = super.list();
        List<SysConfigDtoEs> collect = allData.stream().map((item) -> {
            SysConfigDtoEs info = new SysConfigDtoEs();
            BeanUtils.copyProperties(item, info);
            if (item.getId() == 125) {
                info = doConfigValue(info, item);
            }
            return info;
        }).collect(Collectors.toList());


        dtoRes.setAllData(collect);
        HashMap<String, String> configForm = new HashMap<>();
        //设置configForm
        for (int i = 0; i < allData.size(); i++) {
            SysConfig config = allData.get(i);
            String attrKey = config.getAttrKey();
            String attrValue = config.getAttrValue();
            configForm.put(attrKey, attrValue);
        }
        dtoRes.setConfigForm(configForm);

        //设置configRules
        LambdaQueryWrapper<SysConfig> qwq = new LambdaQueryWrapper<>();
        qwq.eq(SysConfig::getAttrKey, "site_name");
        SysConfig one = super.getOne(qwq);
        String validator = one.getValidator();
        HashMap<String, String> map = new HashMap<>();
        map.put("site_name", validator);
        dtoRes.setConfigRules(map);
        return dtoRes;
    }
//是否关闭系统
    public SysConfigDtoEs doConfigValue(SysConfigDtoEs dto, SysConfig config) {

        String config_value = config.getConfigValue();
        if (config_value != null && !"".equals(config_value)) {
            Integer type = config.getType();
            if (type == 4) {
                String[] rules = config_value.split("&");
                List<Map<String, Object>> configValue = new ArrayList<>();
                for (String rule : rules) {
                    String[] split = rule.split("=");
                    Map<String, Object> ruleHashMap = new HashMap<>();

                    ruleHashMap.put("label", split[0]);
                    ruleHashMap.put("value", split[1]);
                    configValue.add(ruleHashMap);
                }
                dto.setConfigValue(configValue);

                return dto;
            }
        }
        return null;
    }
//        LambdaQueryWrapper<SysConfig> qw = new LambdaQueryWrapper();
//        List<ListDto> list = new ArrayList<>();
//        //list:1
//        ListDto listDto = new ListDto();//
//        listDto.setName("基础配置");
//        listDto.setKey("base");
//        List<ChildrenDto> childrenDtoList = new ArrayList<>();
//        qw.eq(SysConfig::getGroupValue, "站点配置");
//        List<SysConfig> list1 = super.list(qw);
//        List<SysConfigDtoEs> sysConfigList = new ArrayList<>();
//        for (SysConfig sysConfig : list1) {
//            SysConfigDtoEs sysConfig1 = new SysConfigDtoEs();
//            if (sysConfig.getType() != 4) {
//                BeanUtils.copyProperties(sysConfig, sysConfig1);
//                sysConfigList.add(sysConfig1);
//            } else {
//                String configValue = sysConfig.getConfigValue();
//                if (configValue != null ) {
//                    String[] split = configValue.split("&");
//                    List configValue1 = sysConfig1.getConfigValue();
//                    for (String s : split) {
//                        String[] split1 = s.split("=");
//                        HashMap<String, String> value = new HashMap<>();
//                        for (int i = 0; i < split1.length; i++) {
//                            value.put("label", split1[0]);
//                            value.put("value", split1[1]);
//                            configValue1.add(value);
//                        }
//                        sysConfig1.setConfigValue(configValue1);
//                    }
//                    BeanUtils.copyProperties(sysConfig, sysConfig1);
//                    sysConfigList.add(sysConfig1);
//                }
//
//            }
//        }
//        ChildrenDto childrenDto = new ChildrenDto();
//        childrenDto.setName("站点配置");
//        childrenDto.setData(sysConfigList);
//        childrenDtoList.add(childrenDto);
//
//        LambdaQueryWrapper<SysConfig> qw2 = new LambdaQueryWrapper();
//        qw.eq(SysConfig::getGroupValue, "底部信息");
//        List<SysConfig> list2 = super.list(qw2);
//        ChildrenDto childrenDto2 = new ChildrenDto();
//        childrenDto2.setName("底部信息");
//        childrenDto2.setData(list2);
//        childrenDtoList.add(childrenDto2);
//
//        LambdaQueryWrapper<SysConfig> qw3 = new LambdaQueryWrapper<>();
//        qw3.eq(SysConfig::getGroupValue, "其他配置");
//        List<SysConfig> list3 = super.list(qw3);
//        ChildrenDto childrenDto3 = new ChildrenDto();
//        childrenDto3.setName("其他配置");
//        childrenDto3.setData(list3);
//        childrenDtoList.add(childrenDto3);
//        listDto.setChildren(childrenDtoList);
//        list.add(listDto);
//
//        //list:2
//        ListDto listDto2 = new ListDto();
//        listDto2.setName("系统设置");
//        listDto2.setKey("system");
//        List<ChildrenDto> childrenDtoList2 = new ArrayList<>();
//        LambdaQueryWrapper<SysConfig> qwa = new LambdaQueryWrapper();
//        qwa.eq(SysConfig::getGroupValue, "管理系统配置");
//        List<SysConfig> list4 = super.list(qwa);
//        ChildrenDto childrenDto1 = new ChildrenDto();
//        childrenDto1.setName("管理系统配置");
//        childrenDto1.setData(list4);
//        childrenDtoList2.add(childrenDto1);
//        listDto2.setChildren(childrenDtoList2);
//        list.add(listDto2);
//
//        //list:3
//        ListDto listDto3 = new ListDto();
//        listDto3.setName("其他设置");
//        listDto3.setKey("custom");
//        List<ChildrenDto> childrenDtoList3 = new ArrayList<>();
//        LambdaQueryWrapper<SysConfig> qu = new LambdaQueryWrapper<>();
//        qu.eq(SysConfig::getGroupValue, "通知公告");
//        List<SysConfig> list5 = super.list(qu);
//        ChildrenDto childrenDto4 = new ChildrenDto();
//        childrenDto4.setName("通知公告");
//        childrenDto4.setData(list5);
//        childrenDtoList3.add(childrenDto4);
//
//        LambdaQueryWrapper<SysConfig> qu2 = new LambdaQueryWrapper<>();
//        qu2.eq(SysConfig::getGroupValue, "前台图片");
//        List<SysConfig> list6 = super.list(qu2);
//        ChildrenDto childrenDto5 = new ChildrenDto();
//        childrenDto5.setName("前台图片");
//        childrenDto5.setData(list6);
//        childrenDtoList3.add(childrenDto5);
//        listDto3.setChildren(childrenDtoList3);
//        list.add(listDto3);
//
////alldata
//        List<SysConfigDtoEs> allData = new ArrayList<>();
//        LambdaQueryWrapper<SysConfig> queryWrapper = new LambdaQueryWrapper<>();
//        List<SysConfig> list7 = super.list(queryWrapper);
//        for (SysConfig sysConfig : list7) {
//            SysConfigDtoEs sysConfig1 = new SysConfigDtoEs();
//            if (sysConfig.getId() != 125) {
//                BeanUtils.copyProperties(sysConfig, sysConfig1);
//                allData.add(sysConfig1);
//            }
//        }
//
//
//        //configform
//        HashMap<String, String> configForm = new HashMap<>();
//        for (SysConfig allDatum : allData) {
//            String s = allDatum.getAttrKey();
//            String s1 = allDatum.getAttrValue();
//            configForm.put(s, s1);
//        }
//        //configRules
//        HashMap<String, String> configRules = new HashMap<>();
//        LambdaQueryWrapper<SysConfig> l = new LambdaQueryWrapper<>();
//        l.eq(SysConfig::getAttrKey, "site_name");
//        SysConfig one = super.getOne(l);
//        String validator = one.getValidator();
//        configRules.put("site_name", validator);
//
//
//        SysConfigDto sysConfigDto = new SysConfigDto();
//        sysConfigDto.setList(list);
//        sysConfigDto.setAllData(allData);
//        sysConfigDto.setConfigForm(configForm);
//        sysConfigDto.setConfigRules(configRules);
//        return sysConfigDto;
    }
